#ifndef _DIR_H
#define _DIR_H

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "../bool/bool.h"
#include "../block/block.h"

#define MAX_DIR_ELMT 200
#define INODE_NO_SIZE 2
#define NAME_SIZE 16

//tipe bentukan elemen direktori yaitu inode number dan nama file/dir
typedef struct {
	unsigned inode_no;
	char* name;
} direlement;

//tipe bentukan direktori, satu direktori maksimal 200 file/dir
typedef struct {
	direlement* direlements;
} dir_t;

//membuat dir element baru dan alokasi memorinya
void createDirElmt(direlement*);

//mengembalikan nilai true atau 1 bila direlement kosong
bool isDirElmtEmpty(direlement);

//mengosongkan dir element
void emptyDirElmt(direlement*);

//init menginisiasi dir_t yang baru
void createDir(dir_t*);

//insert info inode baru ke direktori mengembalikan 0 kalau berhasil, mengembalikan 1 kalo gagal
//arg0 -> direktori yang akan diinsert sesuatu; arg1 -> i-node number (2byte); arg2 -> file/dir name (16byte);
bool insert(dir_t*,unsigned,char*);

//delete info di sebuah dir, mengembalikan 0 kalau berhasil, mengembalikan 1 kalo gagal
//arg0 -> direktori yang akan diinsert sesuatu; arg1 -> i-node number (2byte);
bool delete(dir_t*,unsigned);

//membaca direktori berdasarkan inode numbernya
void readDir(dir_t*,FILE*,unsigned);

//menuliskan direktori berdasarkan inode numbernya
void writeDir(dir_t,FILE*,unsigned,unsigned,unsigned long);

//dapet dir dari array of inode number
dir_t getDirFromPath(FILE*, unsigned[]);


#endif
